
class ScriptContext {
  constructor(){
    // 执行脚本的运行上下文
    // 也是容器引擎在改变流程执行的上下文
    
  }

  /**
   * 以当前的上下文运行脚本。
   */
  execute(script,inputParams){
    const scriptEval = new Function(`
      with(this){
        ${script};
      }
    `);
    script.call(this);
  }

  /**
   * 改变组件的值
   */
  changeComponentValue(){}
}

export class FlowEngine {

  /**
   * 执行结果都在上下文中，不需要输入输出
   * @param {*} uiEngine 
   * @param {*} config 
   */
  constructor(uiEngine,config) {
    this.$ui = uiEngine;

    const parser = new DOMParser();
    const info = parser.parseFromString(config, "text/xml");


    // 开始节点： 从上下文找找输入
    const node = this.getNodeByName('startEvent');

    //
    
    
    
    console.log(info)
    // 执行节点功能，
    // 从UI engine实例中获取数据

    // <param key="inputValue" value-type="string" value-from="component" value="input_3" />
    const value = uiEngine.getValueFromComponent('input_3');

    // 脚本的上下文和变量。通过webwork运行吗？
    // 如果节点没有输入输出
    // 输入，输入， 上下文

    //1. start节点。
    // const node = this.getNodeByName('start');

    

    //2. message节点。消息的通知提示应该有独立的实现
    // {
    //   message:'消息提示的内容',
    //   type:'error'
    // }
    // 通过事件通知上层的业务调用方发起消息提示信息。
    // 执行节点完成节点任务，输出节点信息，
    console.log(node)
    
    // name or =type  根据类型选择区别
    if(node.name === "") {
      // task任务节点，执行任务内容
      // 
    }


    // end/
    if(node.name === "endEvent"){
      // end
    }
    


    console.log(value)

  }

  getNodeByName(name){}
  getNodeById(id){

  }
}


//
// {
//   "id":"1"
//   "label":"start",
//   "type":"script",
//   "conditions":{
//     "a===1":"1",
//     "b===2":"2"
//   },
//   "next":"2"
// }